package org.excilys.training.ebanking.idao;

import java.util.List;

import org.excilys.training.ebanking.model.Operation;

public interface IDaoOperation {

	/**
	 * Méthode permettant de récupérer une liste d'opérations, excepté ceux
	 * réalisées par cartes, à partir du numero de compte
	 * <p>
	 * 
	 * @param id
	 *            numero de compte
	 * 
	 * @return liste des opérations d'un compte
	 */
	List<Operation> getAllNoCarteOperationsByCompte(int id);

	/**
	 * Méthode permettant d'obtenir la liste des opération effectué par carte
	 * ppur un compte donnée
	 * <p>
	 * 
	 * @param id
	 *            numero de compte
	 * @return liste d'opérations carte
	 */
	List<Operation> getAllCarteOperationsByCompte(int id);

	/**
	 * Méthode permetant d'obtenir la liste de montants d'opérations par carte
	 * pour un compte, un mois donnée et une année donnée
	 * <p>
	 * 
	 * @param id
	 *            numero de compte
	 * @param mois
	 *            mois de l'année choisie
	 * @param annee
	 *            annee choisie
	 * 
	 * @return liste de montants
	 */
	List<Double> getMontantsOperationsCarteByMonth(int id, int mois, int annee);

	/**
	 * Méthode permettant d'obtenir une liste d'operation sans carte
	 * 
	 * @param id
	 *            numero de compte
	 * @param mois
	 * @param year
	 * @param numeropremiereoperations
	 *            indice du premier élément selectionné
	 * @param nombreoperation
	 *            nombre d'operation de la liste
	 * 
	 * @return liste d'operations
	 */
	List<Operation> getSomeNoCarteOperationsByCompte(int id, int mois,
			int year, int numeropremiereoperations, int nombreoperation);

	/**
	 * Méthode permettant d'obtenir une liste d'operation sans carte
	 * 
	 * @param id
	 *            numero de compte
	 * @param mois
	 * @param year
	 * @param numeropremiereoperations
	 *            indice du premier élément selectionné
	 * @param nombreoperation
	 *            nombre d'operation de la liste
	 * 
	 * @return liste d'operations
	 */
	List<Operation> getSomeCarteOperationsByCompte(int id, int mois, int year,
			int numeropremiereoperations, int nombreoperation);

	/**
	 * Méthode permettant d'obtenir une liste d'operation effectué par carte
	 * pour un mois et une année donné
	 * 
	 * @param id
	 *            numero du compte
	 * @param mois
	 * @param year
	 * 
	 * @return nombre opération effectué par carte
	 */
	int getNombreOperationsCard(int id, int mois, int year);

	/**
	 * Méthode permettant d'obtenir une liste d'operation effectué sans carte
	 * pour un mois et une année donné
	 * 
	 * @param id
	 *            numero du compte
	 * @param mois
	 * @param year
	 * 
	 * @return nombre opération effectué sans carte
	 */
	int getNombreOperationsWithoutCard(int id, int mois, int year);

	/**
	 * Création d'une opération
	 * 
	 * @param operation
	 */
	void createOperation(Operation operation);

	void deleteOperation(Operation operation);

	/**
	 * Méthode retournant la liste de tous les virements
	 * 
	 * @param idCompte
	 *            numero de compte
	 * 
	 * @return liste de virements
	 */
	List<Operation> getAllVirement(int idCompte);
}
